/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {
        //递归，无线调用这个方法，结束条件，为空，或者下一个为空
        if(head == null || head.next ==null) return head;

        //定义一个中间值
        ListNode temp = new ListNode(0);
        
        //指向第二个位置
        ListNode next = head.next;
        //中间值指向这个next
        temp.next = next;
        //原本第一的位置指向第三的位置
        head.next = next.next;
        //第二的位置指向第一的位置
        next.next = head ;
        //无限递归
        head.next = swapPairs(head.next);
        //返回最开始的temp的指向
        return temp.next;
    }
}